package reporte.filtros;

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import productosYPresentaciones.Producto;
import sucursal.Stock;

/**
 * Clase del test generico Filtro<Producto>
 * @author Octavio Nicolas Pompilio
 *
 */
public abstract class FiltroProductoTest {

	public List<Producto> lista;
	public Stock stock;
	public Producto prod1,prod2,prod3;
	private Filtro<Producto> filtro;
	
	@Before
	public void setUp() throws Exception {
		stock = mock( Stock.class );
		
		lista = new ArrayList<Producto>();
		prod1 = mock( Producto.class );
		prod2 = mock( Producto.class );
		prod3 = mock( Producto.class );
		
		lista.add(prod1);
		lista.add(prod2);
		lista.add(prod3);
		
		when(stock.getProductosDelStock()).thenReturn(lista);
		when(stock.getCantStock(prod1)).thenReturn(2);
		when(stock.getCantStock(prod2)).thenReturn(2);
		when(stock.getCantStock(prod3)).thenReturn(2);
	}
	
	public void setSUT(Filtro<Producto> filtro){
		this.filtro = filtro;
	}
	
	public Filtro<Producto> getSUT(){
		return this.filtro;
	}
	
	@Test
	public abstract void testDelFiltro();
	
	@Test
	public abstract void testDeLaCondicion();
	
	@Test
	public void testSucursalesSinProductosDanReportesVacios() {
		//when(stock.getProductosDelStock()).thenReturn(new ArrayList<Producto>() )
		assertTrue( getSUT().filtrar(new ArrayList<Producto>() ).isEmpty() );
	}
}
